Startseite

ImageQuery
Metadatensuche für JPG-Bilddateien

© 2004 Midnight! Software.
Cool freeware since 1982.

Wozu dient ImageQuery?
Erfahren Sie mehr über die Einsatzmöglichkeiten und den Zweck von ImageQuery.

Installation
Informationen zu den Systemanforderungen und der Installation des Programms.

Was ist neu?
Hier finden Sie Informationen, was sich seit der letzten Version geändert hat.

Arbeiten mit ImageQuery
Dieser Abschnitt zeigt Ihnen, wie Sieit ImageQuery arbeiten.

Disclaimer

THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


Programmzweck

Zweck des Programms

ImageQuery dient der Suche nach Metadaten in JPEG-Bildern. Metadaten sind beschreibende Zusatzdaten zu den eigentlichen Bildinformationen. Diese werden zum Großteil bereits von den Digitalkameras in die Bilddateien eingetragen, können aber auch nachträglich durch entsprechende Programme verändert oder ergänzt werden.

Zielgruppe

Mit Hilfe von ImageQuery kann schnell und einfach nach diesen Daten gesucht werden. Die Zielgruppe des Programms sind alle Personen, die häufig nach Informationen in Bildern von Digitalkameras suchen müssen, um diese dann weiterzuverarbeiten. Egal, ob Amateurfotograf, Bildredakteur oder Webautor, mit diesem Programm erhalten Sie die Möglichkeit, ohne aufwendige Bilddatenbank komplexe Suchanfragen durchzuführen.

Vorteile

Sie müssen sich keine Bilddatenbank kaufen oder erst langwierig Metadaten in eine Datenbank importieren, die dann nie auf dem aktuellen Stand sind. Da ImageQuery die Daten direkt aus den JPG-Dateien liest, arbeiten Sie mit den tatsächlichen Metadaten. Ambitionierte Amateure und Profis nutzen für sie Suche kaum die Miniaturansicht vieler Bildbetrachter, sondern suchen zuerst nach Schlagworten in den IPTC-Feldern der Bilddateien. Ist eine Auswahl getroffen, schwört sowieso jeder Anwender auf einen anderen Bildbetrachter für die Auswahl, daher beschränkt sich ImageQuery auf die Ausgabe und Weiterleitung der Treffer.

Beispiele

Sie wollen ein paar Beispiele? Kann Ihr Bildersuchprogramm das auch?

  • SELECT Mode, DateTimeOriginal, FNumber, ShutterSpeedValue
    FROM c:\pics\*.jpg
    WHERE Upper(Make) == 'CANON'
  • SELECT Name, IsNull(DateTimeOriginal, ‘No picture date, file date is ‘ & DateCreated)
    FROM "g:\My Images\2004\ *.jpg
    WHERE ByLine = 'PhotographerName'
    WITH subdirs
  • SELECT Name, Size, Caption, ByLine
    FROM "g:\My Images\2004\ *.jpg
    WHERE (DatePart('month’, DateTimeOriginal) > 3) and (DatePart('month’, DateTimeOriginal) < 7)

Funktionen

Hier ist eine kleine Auswahl der Möglichkeiten von ImageQuery!

· ImageQuery sucht nicht nur nach EXIF-, sondern auch nach erweiterten Datei- und IPTC-Daten.

· Eine SQL-ähnliche Abfragesprache gibt Ihnen die volle Kontrolle über Suchanfragen.

· Keine Datei wird verändert, das Programm liest nur und ist damit auch für Neueinsteiger sicher.

· ImageQuery unterstützt auch komplexe Abfragen und Kombinationen von Suchausdrücken.

· Unterstützung von regulären Ausdrücken, damit Sie wirklich nur das finden, was Sie suchen.

· Abfragepuffer, ein einziger Mausklick reicht für die Wiederverwendung alter Abfragen.

· Keine umfangreiche Installation, eine EXE und die Hilfe ist alles, was Sie brauchen.


Was ist neu?

Neu in dieser Version

Version 1.3.1

  • Beim XML-Export funktionierte die Schaltfläche für den Aufruf des Dateidialogs nicht, wurde korrigiert.
  • Falls beim XML-Export keine Erweiterung angegeben wurde, wird nun die Erweiterung .xml verwendet.

Version 1.3.0

  • Für den Export der Metadaten existiert nun eine Möglichkeit des XML-Exports. Über die Tastenkombination Umschalt-F12 kann das Formular für den XML-Export aufgerufen werden.
  • Beim Textexport der Ergebnisse kann jetzt ein Vorspann und ein Nachspann als Text angegeben werden. Damit besteht die Möglichkeit der Angabe von Vorspann und Nachspann für die Datei, die Datenzeilen und die Spalten.
  • Die Sprachumschaltung funktioniert jetzt auch für das Dialogfeld zur Sprachumschaltung. Sollten Sie eine Übersetzung für eine andere Sprache erstellt haben, werde ich diese gerne in das Setup integrieren.
  • Die Tastenkombination für das Ablegen einer Abfrage im Abfragenpuffer lautet ab 1.3.0 [Strg][Alt][S].
  • In den Dateioperationen ist nun auch die Ausführung eines Programms, Batchfiles oder Betriebssystemkommandos möglich. Die Aktivierung der Option für das Nachfragen wartet vor jedem Kommando auf eine Bestätigung.

Version 1.2.2

  • Ein Fehler in der Darstellung von IPTC-Feldern wurde behoben, der in seltenen Fällen bei Bildern nicht den gesamten Inhalt des IPTC-Feldes angezeigt hat. Dies trat bei allen Dateien auf, die im Inhalt Nullbytes oder mehr als ein Nullbyte am Ende des IPTC-Feldes hatten.

Version 1.2.1

  • Die Versionsnummer wird nun in der Aboutbox korrekt angezeigt (war vorher statisch auf 1.1 eingestellt).
  • Die Begrenzungszeichen für Stringkonstanten können von einfachen auf doppelte Anführungszeichen umgestellt werden.

Version 1.2.0

  • Neue Feldliste für den schnellen Zugriff auf die Feldnamen.
  • Logischere Anordnung der Elemente für die Dateioperationen.
  • Kleinere Fehlerbehebungen.

Version 1.1.4

  • Fehlerbehebung bei der Verarbeitung von Dateien mit mehreren Stichwörten (IPTC-Feld Keywords)
  • Das Ablegen einer Abfrage im Puffer mit einen bereits existierenden Namen erlaubt das Überschreiben der alten Abfrage nach Bestätigung.
  • Das Kontextmenü (rechte Maustaste) der Ergebnisse wurde erweitert und enthält nun ebenfalls die Ergebnisaktionen.
  • Die Verarbeitung der Ergebnisse ist nun über eine Reihe von Dateioperationen möglich und bietet auch ohne die Definition von Ergebnisaktionen viele Möglichkeiten der Weiterverarbeitung.
  • Ein Doppelklick auf eine Ergebniszeile oder ein Vorschaubild startet nun das zugerodnete Standardprogramm (entspricht der Menüoption „Öffnen“ aus dem Kontextmenü).
  • Erweiterungen der Online-Hilfe für Dateioperationen, bessere Gliederung des Inhalts.

Version 1.1.3

In dieser Version sind folgende Änderungen vorgenommen worden:

  • Die Anpassung der Spalten in der Detailansicht wurde verbessert. Alle Spalten sind automatisch so breit, dass der längste Text einer Spalte bzw. die Beschriftung komplett angezeigt wird, je nachdem, welche Information breiter ist. Beim Ändern der Grösse bleibt die Breite der einzelnen Spalten nun unverändert und kann vom Benutzer angepasst werden.
  • Beim Abfrage-Assistenten wurde ein Fehler bei der Auswahl aller Felder behoben. Zusätzlich ist beim Assistenten jetzt die Auswahl der Felder nach den Gruppen EXIF / IPTC / FILE möglich.

Version 1.1.2

  • Nur Englisch, keine deutsche Version

Version 1.1.1 (21.09.2004)

In dieser Version sind folgende Änderungen am Programm vorgenommen worden:

  • Implementierung einer Druckfunktion zum Ausdruck der Ergebnisse.
  • Korrektur der Erstellung der Vorschaubilder (Hochkantaufnahmen und komplett generierte Bilder wurden abgeschnitten).
  • In der Detailansicht kann durch das Klicken auf einen Spaltentitel nach dieser Spalte sortiert werden. Wird nochmals auf die gleiche Spalte geklickt, wird in absteigender Reihenfolge sortiert.
  • Ergänzungen bei der Online-Hilfe für die Metadatenfelder. Die meisten Felder haben jetzt eine Erläuterung, die über die Schlüsselworthilfe (Menü „Hilfe“ / „Schlüsselworthilfe“) aktiviert werden kann.
  • Bugfixes beim Parser im Zusammenhang mit logischen Operatoren (and, or, not) und Nullwerten.
  • Der Zustand der Ergebnisanzeige (Details, Vorschau, Liste) wird nun in der Registry abgelegt und wird beim nächsten Start wiederhergestellt.
  • Diverse kleine Fehlerbehebungen.

Version 1.0 (17.09.2004)

Dies ist die erste veröffentlichte Version von ImageQuery. Das Programm wurde intensiv getestet und es gab natürlich einige interne Vorversionen, dennoch sind sicher noch einige Probleme im Code verborgen, die nur darauf warten entdeckt zu werden.


Systemanforderungen und Installation

Systemanforderungen

ImageQuery läuft mit nahezu jeder Hardware, die Microsoft Windows unterstützt. Für optimale Leistung sollten Sie jedoch mindestens eine Pentium-CPU mit 500MHz oder besser und 256 MByte Arbeitsspeicher installiert haben und die Grafikkarte Ihres Rechners sollte 16 Bit Farbtiefe unterstützen. Der erforderliche Plattenplatz für ImageQuery sollte kein Problem darstellen: das Programm ist mit etwa 2MByte kleiner als manche hochauflösende JPG-Grafik.

Installation

Nachdem Sie die Online-Hilfe lesen können, ist die Installation geglückt. :-) ImageQuery benötigt keine besondere Installation. Ein nachträgliches Verschieben des Programms ist ohne Probleme möglich, solange die Hilfedatei (.chm) im gleichen Ordner bleibt.

Eventuell möchten Sie die technischen Hinweise lesen, falls Sie mehr über Registryzugriffe und benutzerspezifische Dateien des Programms erfahren wollen.


Arbeiten mit ImageQuery

Der Hauptbildschirm

Der Hauptbildschirm von ImageQuery.

Der Hauptbildschirm von ImageQuery gliedert sich in folgende Bereiche:

  • Ein Menübereich oben unter der Titelleiste
  • Ein Bereich mit einer Symbolleiste
  • Der Edittierbereich für die Abfragen (hier mit einer Beispielabfrage)
  • Der Ergebnisbereich (hier mit der Detailansicht)
  • Die Statusleiste am unteren Ende des Fensters

Die Symbolleiste

Mit Hilfe der Symbolleiste können Sie schnell häufig benötigte Funktionen auslösen.

Sobald Sie in der Anwendung mit dem Mauszeiger über die einzelnen Symbole fahren, erscheint eine kleine Meldung, die die Funktion des Symbolfläche angibt. Sollte für diese Funktion eine Tastenkombination definiert sein, wird diese ebenfalls angezeigt.

Der Editierbereich

In diesem Bereich erstellen Sie die Abfragen. Sie können alle normalen Textbearbeitungsfunktionen von Windows nutzen (wie z.B. im Editor Notepad). Zusätzliche Informationen finden Sie unter dem Stichwort Tastenkombinationen.

Der Ergebnisbereich

Im Ergebnisbereich finden Sie nach der Ausführung einer Abfrage die zutreffenden Dateien mit den Informationen, die im SELECT-Teil der Abfrage festgelegt wurden. Nachfolgend finden Sie eine verkleinerte Abbildungen eines Ergebnisses in allen drei Ansichten (Liste, Detail und Vorschau).

Der Ergebnisbereich in allen drei Ansichten.


Tastenkombinationen

Sie können die unten gezeigten Tastenkombinationen für die Arbeit mit ImageQuery verwenden.

Taste | Beschreibung
Ctrl-A | Markiert den gesamten Text der Abfrage
Ctrl-Alt-C | Kopiert die Dateinamen der Auswahl in de Zwischenablage
Ctrl-D | Detailansicht der Ergebnisliste
Ctrl-I | Bildvorschau in der Ergebnisliste
Ctrl-E | Abfrage ausführen (execute)
Ctrl-L | Listenansicht in der Ergebnisliste
Ctrl-O | Öffnet eine gespeicherte Abfrage
Ctrl-S | Speichert eine Abfrage in einer Datei
F1 | Zeigt die Online-Hilfe an
Shift-F1 | Falls sich die Textmarke auf einem Schlüsselwort befindet, wird eine Syntaxhilfe angezeigt.
F12 | Export von Ergebnissen in eine Textdatei
Shift-F12 | Export von Ergebnissen in eine XML-Datei
Strg-Alt-S | Legt eine Abfrage im Abfragepuffer ab
Alt-Up | Liest die vorherige Abfrage aus dem Abfragepuffer ein
Alt-Down | Liest die nächste Abfrage aus dem Abfragepuffer ein

Vervollständigung von Feldnamen

Sie müssen die Feldnamen der Metadatenfelder nicht tippen! Sobald Sie die Tastenkombination [Strg][Tab] drücken und die [Strg]-Taste gedrückt halten, wechselt mit jeden weiteren Druck auf [Tab] der Name des Feldes um ein Element weiter. Haben Sie bereits einige Buchstaben eingegeben, wird diese Eingabe als Startwert verwendet. So reicht also die Eingabe von „ca“, um mit zweimal [Strg][Tab] zwischen den Feldern „Caption“ und „Category“ zu wechseln. Sobald Sie die [Strg]-Taste auslassen, wird der angezeigte Feldname übernommen und die Textmarke hinter den Feldnamen gesetzt. So können Sie sofort weiterschreiben. Klingt komplizierter, als es ist. Probieren Sie es einfach aus! Sie werden nie wieder Feldnamen komplett eingeben wollen.


Abfrage-Assistent

Der Abfrage-Assistant hilft Ihnen bei der Erstellung von einfachen Abfragen und ist gerade für Einsteiger die ideale Möglichkeit, sich schnell mit der Abfragesprache vertraut zu machen. Falls Sie bereits Erfahrung mit Abfragesprachen (wie z.B. SQL) haben, ist es vielleicht interessanter, die Abfragen selbst zu erstellen. Dies bietet Ihnen wesentlich mehr Möglichkeiten.

Nach dem Start des Assistenten erscheint der unten abgebildete Startbildschirm:

Der Startbildschirm des Assistenten.

Nachem hier ausser Lesen nicht viel zu tun ist, geht es gleich weiter zum nächsten Schritt. Klicken Sie auf die Schaltfläche „Vorwärts >“.

Auswahl der Dateien

Die Auswahl der zu durchsuchenden Dateien.

Hier geben Sie die Suchmaske für die Dateien ein, die in die Suche einbezogen werden sollen. In den meisten Fällen werden Sie die Vorgabe (alle JPG-Dateien) nicht ändern müssen. Es wird aber oft die Angabe eines Pfades vor der Dateimaske nötig sein. Um Ihnen die Tipparbeit zu ersparen, können Sie die Schaltfläche rechts vom Eingabefeld nutzen, um ein Dialogfeld zur Ordnerauswahl aufzurufen. Falls Sie auch unterhalb des Startordners suchen wollen, aktivieren Sie die Option „Unterordner ebenfalls durchsuchen“. Klicken Sie dann wieder auf „Vorwärts >“.

Auswahl der Metadatenfelder

Auswahl der anzuzeigenden Metadatenfelder.

Dieser Schritt erlaubt die Auswahl der im Ergebnis anzuzeigenden Metadatenfelder. Bitte beachten Sie, dass die erste Spalten immer auch für die Beschriftung der Vorschaubilder sowie die Anzeige im Listenmodus verwendet wird. Die Reiehnfolge der Felder können Sie mit den beiden Pfeilschaltflächen rechts verändern. Wenn Sie die Liste erstellt haben, klicken Sie auf „Vorwärts >“.

Auswahl einer Filterbedingung

Definition einer Filterbedingung.

In einigen Fällen möchten Sie vielleicht nicht alle Dateien aus der Suchmaske im Ergebnis haben. Ein Beispiel: wenn Sie für alle Dateien den Titel auflisten, wäre es vielleicht wünschenswert, auch nur die Dateien in das Ergebnis aufzunehmen, die auch einen Titel haben. Daher lassen sich hier Filterausdrücke definieren, die erfüllt sein müssen, damit eine Datei in das Ergebnis aufgenommen wird.

Stellen Sie mit den drei Auswahlboxen im Dialogfeld die Bedingung zusammen. Anschliesend können Sie diese über die Schaltfläche „OR“ oder „AND“ zur Liste der Bedingungen hinzufügen. Bei der ersten Bedingung ist die Wahl der Schaltfläche unerheblich. Bei allen weiteren Bedingungen können Sie über „OR“ bzw. „AND“ angeben, wie Sie diese neue Bedingung mit den bereits vorhandenen verknüpfen wollen.

Fertigstellen

Dieser Schritt beendet die Dateneingabe. Klicken Sie auf die Schaltfläche “Fertig” und der Abfrage-Assistent erstellt im Editierbereich eine Abfrage nach Ihren Angaben. Diese Abfrage können Sie bei Bedarf noch weiter bearbeiten. Führen Sie anschließend die Abfrage über die Tastenkombination [Strg][E] oder die Menüauswahl „Abfrage“ / „Ausführen“ aus.

Hinweis für erfahrene Benutzer

Die beiden Auswahlboxen für die Filterbedingung erlauben auch die Eingabe von individuellem Text. Damit können Sie auch einen Funktionsaufruf oder zwei Felder miteinander verknüpfen. Ausserdem steht Ihnen nach der Ausführung des Abfrage-Assistenten auch die Möglichkeit der Veränderung der Abfrage über Tastenkürzel zur Verfügung.


Query Buffers

Abfrage-Puffer

Während der Entwicklung von ImageQuery bestand immer der Bedarf, zu Testzwecken schnell zwischen einzelnen Abfragen zu wechseln. Natürlich können Abfragen in Dateien gespeichert und von dort wieder geladen werden. Muss aber stetig mit fünf bis zehn Abfragen gearbeitet werden, wird das schnell lästig. Daher wurde ein Abfrage-Puffer implementiert, der den schnellen Wechsel zwischen einzelnen Abfragen erlaubt. Nachdem die Testbenutzer von dieser Möglichkeit sehr angetan waren, wurde die Funktion im fertigen Programm beibehalten.

Ablegen einer Abfrage

Während der Bearbeitung einer Abfrage können Sie jederzeit den Text des Editierbereichs im Abfragepuffer ablegen. Benutzen sie dazu die Menüoption „Abfrage“ / „Abfrage in Liste“ (Tastenkürzel [Strg][Alt][S]) oder die Symbolleiste. Dies öffnet ein kleines Formular für die Eingabe des Abfragenamens:

Festlegen des Abfragenamens.

Falls Sie die Option “Zeitstempel erzeugen” aktivieren, wird vor der Abfrage ein Kommentar mit Datum und Zeit eingefügt.

Einlesen einer Abfrage aus dem Puffer

Sie können aus dem Abfragepuffer jederzeit eine Abfrage in den Editierbereich übertragen. Öffnen Sie dazu die Auswahlbox in der Symbolleiste und wählen Sie eine Abfrage aus. Alternativ können Sie auch die beiden Pfeilsymbole benutzen, die ein schnelles „Durchblättern“ der Abfragen im Puffer erlauben.

Auswählen aus dem Abfragepuffer.

Bitte denken Sie daran, dass die Auswahl aus dem Puffer den aktuellen Inhalt des Editierbereiches ohne Rückfrage überschreibt! Es empfiehlt sich, bei längerem „Basteln“ an einer Abfrage diese regelmässig in einer Datei oder ebenfalls imPuffer abzulegen.

Entfernen einer Abfrage aus dem Puffer

Falls Sie eine Abfrage nicht länger benötigen, klicken Sie mit der rechten Maustaste auf einen Eintrag der Auswahlbox und wählen Sie dann „Aus Liste löschen“ aus dem Kontext-Menü. Dieses bietet auch eine Möglichkeit, Abfrage in eine Datei zu sichern.

Note for advanced users

The query buffer is stored in a plain text file in the application data folder of the current user’s profile. The file is named Midnight!Software\ImageQuery\querylist.txt under the app data folder. File structure is most simple: one query per line, the name for combo box ist the key, followed by an equal sign that separates name and query text. All occurenced of the vertical bar symbol are replaced with a CR/LF combination in the edit window. If the application cannot resolve the environment variable APPDATA upon exit, buffered queries will not be saved (APPDATA is standard from Windows 2000 upwards).


Ergebnisse verarbeiten

Verarbeiten der Ergebnisse

Für die Weitervearbeitung der Ergebnisse stehen Ihnen mehrere Kommandos zur Verfügung, die sich in zwei Bereich einteilen lassen: Dateioperationen und Ergebnisaktionen. Ausführen können Sie beide Gruppen entweder über das Menü „Extras“ und dann „Dateioperationen“ bzw. „Eigene Aktionen“. Alternativ können Sie dazu auch auf den ausgewählten Ergebnissen die rechte Maustaste klicken. Daraufhin erscheint folgendes Menü für die Bearbeitung der Ergebnisse:

Kontextmenü im Ergebnisbereich

Das Menü für die rechte Maustaste im Ergebnisbereich.

Dateioperationen

Dies sind normale Operationen, wie Sie diese auch von anderen Programmen kennen. Hier können Sie die in der Ergebnisanzeige markierten Dateien verschieben, kopieren, löschen oder andere Dateioperationen durchführen. Mehr Informationen zu Dateioperationen.

Ergebnisaktionen

Ergebnisaktionen (auch als „Eigene Aktionen“ bezeichnet) erlaubt Ihnen die völlig freie Definition von auszuführenden Kommandos. Damit können Sie externe Programme starten und die Ergebnisse einfach weiterverwenden. Mehr Informationen zu Ergebnisaktionen.

Drucken

Sie können die Ergebnisse natürlich auch ausdrucken lassen. Mehr Informationen zum Ausdrucken.

Exportieren der Ergebnisse

Um die Ergebnisse zu exportieren, können Sie entweder einen Export in eine Textdatei (im Menü „Datei“ bzw. [F12]) oder einen Export in eine XML-Datei (im Menü „Datei“ bzw. [Umschalt][F12]) durchführen.


Dateioperationen

Grundlagen

Nachdem Sie in der Ergebnisanzeige die zu bearbeitenden Dateien ausgewählt haben, können Sie über die rechte Maustaste oder das Menü „Extras“ / „Dateioperationen“ das unten gezeigte Dialogfeld aufrufen. Hier können Sie alle wichtigen Operationen zur Weiterverarbeitung der Dateien ausführen. Diese werden weiter unten erläutert. Geben Sie in den Eingabefeldern den gwünschten Ordner ein oder klicken Sie auf die Schaltflächen rechts neben den Eingabefeldern für eine grafische Ordnerauswahl und klicken Sie dann die Schaltfläche mit der gewünschten Operation an.

Schließen Sie anschliessend das Dialogfeld durch einen Klick auf „OK“.

Wichtiger Hinweis

Deaktivieren Sie die Option „Immer nachfragen ...“ wirklich nur dann, wenn Sie wissen, was Sie da tun! Alle Kopier- und Löschoperationen laufen ohne diese Option ohne Nachfragen ab. Der Autor übernimmt keine Haftung für Datenverlust durch unbedachte Programmbedienung!

Das Dialogfeld „Dateioperationen“

Das Dialogfeld für die Weiterverarbeitung der Ergebnisse.

Kopieren nach

Kopiert die ausgewählten Dateien in den Ordner, der im Eingabefeld rechts neben der Schaltfläche angegeben ist. Falls bei den Optionen die Option „Immer nachfragen“ aktiviert ist, werden Sie bei bestehenden Dateien gefragt, ob diese überschrieben werden sollen.

Verschieben nach

Verscheibt die ausgewählten Dateien in den Ordner, der im Eingabefeld rechts neben der Schaltfläche angegeben ist. Falls bei den Optionen die Option „Immer nachfragen“ aktiviert ist, werden Sie bei bestehenden Dateien gefragt, ob diese überschrieben werden sollen. Nachdem ein Verschieben bedeutet, dass die Dateien aus dem Ursprungsordner entfernt werden, werden diese auch aus der Ergebnismenge entfernt.

Vorschau kopieren

Kopiert die Vorschaubilder der ausgewählten Dateien in den Ordner, der im Eingabefeld rechts neben der Schaltfläche angegeben ist. Falls bei den Optionen die Option „Immer nachfragen“ aktiviert ist, werden Sie bei bestehenden Dateien gefragt, ob diese überschrieben werden sollen. Auf diese Art und Weise können Sie leicht Übersichtsbilder für Kontaktabzüge oder HTML-Seiten erstellen. Der Name der Datei bleibt erhalten, es wird lediglich als Vorsatz der Text „THUMB_“ angefügt.

Namen speichern in

Erstellt eine Textdatei mit den vollständigen Dateinamen aller ausgewählten Dateien. Die Textdatei enthält pro Zeile einen Dateinamen und wird in dem Ordner, der im Eingabefeld rechts neben der Schaltfläche angegeben ist, erzeugt. Diese Datei wird immer überschrieben.

Befehl ausführen

Mit dieser Schaltfläche können Sie für jede Datei aus der Ergebnis ein beliebiges Kommando ausführen. Dies kann ein Programm, ein Betriebssystemkommando oder eine Stapeldatei sein. Falls bei den Optionen die Option „Immer nachfragen“ aktiviert ist, werden Sie für jede Datei gefragt, ob das Kommando ausgeführt werden soll. Damit erhalten Sie nicht nur eine Sicherheitsabfrage, sondern können auch sicherstellen, dass Kommandos squentiell abgearbeitet werden. Sie können das Symbol $filename an beliebiger Stelle des Kommandotextes verwenden, um den kompletten Namen der aktuellen Datei einzusetzen.

Löschen

Löscht die ausgewählten Dateien. Falls bei den Optionen die Option „Immer nachfragen“ aktiviert ist, werden Sie für jede Datei gefragt, ob diese gelöscht werden soll. Sie können beim Löschen auswählen, ob Sie die gelöschten Dateien im Papierkorb erhalten möchten (normales Verschieben in den Papierkorb per [Entf] im Explorer), oder ob die Dateien tatsächlich dauerhaft gelöscht werden sollen (Löschen per [Umschalt][Entf] im Explorer).

Ordner öffnen

Öffnet den Windows Explorer mit dem Ordner, der die ausgewählten Dateien enthält.


Drucken der Ergebnisse

Falls Sie die Ergebnisse Ihrer Suche zu Papier bringen wollen, können Sie über die Menüauswahl „Datei“ / „Drucken“ (Tastenkürzel [Strg][P]) die Druckfunktion von ImageQuery aufrufen. Vor dem Druck können Sie im unten abgebildeten Dialog noch verschiedene Einstellungen treffen.

Der Dialog mit den Druckeinstellungen.

Drucker auswählen

Hier finden Sie eine Liste aller im System installierten Drucker. Wählen Sie den Drucker aus, auf dem der Ausdruck erfolgen soll. Die Einstellungen des Druckers können Sie über die Schaltfläche „Einrichten …“ verändern.

Ränder

Geben Sie hier die jeweiligen Seitenränder in Millimetern ein. Achtung! In dieser Version von ImageQuery erfolgt noch keine Überprüfung auf sinnvolle Werte! Falls Sie also hier 200mm linken Rand eingeben, ist das derzeit Ihr Problem …

Druckoptionen

Mit der Schaltfläche „Schriftart“ können Sie die Schriftart für den Ausdruck verändern. Der Demotext rechts neben der Schaltfläche zeigt die aktuellen Einstellungen an.

Die Option „Nur Dateinamen ohne Pfad“ erlaubt das Weglassen des Dateipfades im Ausdruck. Falls Sie nicht mit der Option WITH subdirs arbeiten, kann dies sinnvoll sein, um Platz zu sparen.

Die Option „Vorschaubilder drucken“ gibt neben den bei SELECT gewählten Spalten auch das kleine Vorschaubild aus. Falls Sie mehr als drei Spalten pro Zeile drucken wollen, sollten Sie diese Option ausschalten.

Die Eingabe „Spalten pro Zeile“ ermöglicht die Auswahl der für den Ausdruck verwendeten Spalten (minimal 1, maximal 4). Auch hier kann es sein, dass bei unpassender Wahl von Spalten pro Zeile und Vorschaubild der Ausdruck unübesichtlich wird.

Beispielausdruck

Hier finden Sie die verkleinerte Abbildung eines Beispielausdrucks:

Ein Beispielausdruck


Ergebnisaktionen

Grundlagen

Eine Ergebnisaktion ist die Ausführung eines Programms für alle in der Ergebnisliste markierten Dateien. Damit sind Sie nicht auf die Funktionen von ImageQuery angewiesen, sondern können eigene Anwendungen in das Programm integrieren. Diese Programme stehen Ihnen dann über das Menü „Extras“ / „Eigene Aktionen“ zur Verfügung. Auf Wunsch können Sie für jede solche Aktion auch ein eigenes Tastenkürzel definieren.

Aktionen bestehen aus folgenden Elementen:

  • Einem Menütext
  • Dem Namen des auszuführenden Programms
  • Der Kommandozeile (Parameter) für das Programm
  • Auf Wunsch einem Tastenkürzel, die die Aktion ebenfalls auslöst.

Erstellen einer Aktion

  1. Öffnen Sie die Programmeinstellungen (Menü „Extras“ / „Einstellungen …“)
  2. Wählen Sie den Reiter „Aktionen“
  3. Klicken Sie auf „Hinzufügen“ und füllen Sie die Felder aus:

  4. Schließen Sie die Dialogfelder wieder durch einen Klick auf „OK“.

Hinweise

Um den Dateinamen der jeweiligen Datei aus der Ergebnisliste an das Programm zu übergeben, wird im Eingabefeld Parameter jedes Auftreten des Textes $filename durch den kompletten Pfadnamen der Datei ersetzt. Um beispielsweise den Dateinamen an das Bildbetrachtungsprogramm IrfanView zu übergeben, setzen Sie das Eingabefeld „Parameter“ auf den Wert „$filename“.

Als gültige Tastenkürzel können die Tasten von 0-9 sowie von A-Z benutzt werden. Es wird empfohlen, sich auf die Kombination von ALT und einer der Zifferntasten zur beschränken. Andernfalls könnten Sie bestehende Tastenkombinationen überschreiben.


Export results

Ergebnisse in eine Textdatei exportieren

ImageQuery unterstützt den Export von Suchergebnissen in eine Textdatei. Sie können die Exportfunktion über die Tastenkombination [F12] oder die Option im Menü Datei starten. Nach der Auswahl erscheint das unten dargestellte Dialogfeld für den Export.

Das Dialogfeld mit den Einstellungen für den Export.

Optionen für den Export

Dateiname

Der Name der Exportdatei. Klicken Sie auf die Symbolschaltfläche rechte neben dem Eingabefeld und Sie erhalten einen Auswahldialog.

Spaltentrenner

Geben Sie das Trennzeichen für die einzelnen Spalten einer Datenzeile an.

String quoting

String quoting for CSV export is quite a difficult matter. As there is no offical “spec” for CSV, we provided several choices for you:

  • Double existing quotes (Excel-like): will double any quotes found ( "Hi!" è ""Hi!"")
  • Backslash quotes (Unix-like): will mark quotes by escaping them with a backslash character (How's è How\'s)
  • Other one: if the string contains single quotes, it will be enclosed with double quotes and vice versa ("Hi!" è ' "Hi!" ')
  • Hex quote: will convert quotes within string data into hex code (How's è How0x27)

The column and line padding edit boxes give you total freedom in selection any prefix or postfox text for columns and data lines. For example, if you enter tag names here, a simple XML structure export is a breeze!

Kopf- und Fusstext

Vorspann und Nachspann für die Datei.

Zeilenbegrenzung

Vorspann und Nachspann pro Datenzeile.

Spaltenbegrenzung

Vorspan und Nachspann pro Spalte.

Nach einem Klick auf die Schaltfläche OK startet der Export, ein Klick auf die Schaltfläche Abbrechen bricht den Export ab.


Export XML

XML-Export der Ergebnisse

ImageQuery supports the export of result lists to a file. You can start the export by using [F12] or using the menu or toolbar actions. After you do this, the export settings dialog shown below will appear.

The export settings dialog box.

Dialog box fields

Export file name

The export filename defines the target file for the export. Click the folder button right to edit box for a folder browser.

Root element

You can set the name of the root element for then export, if you do not want to name it “files”.

Tag type

The default selection is to export tag names as text and as hex codes for unknown tags (e.g. 0x104f).

<metainfo tagname="size">303100</metainfo>

If you select the “Tags as numbers option”, the meta tags will be esported like so:

<metainfo tagname="0x1234">303100</metainfo>

Sample export file

The listing below shows the sample export for a file. Numerical or timestamp data will be written out as normal element content, while other data type (strings, arrays, etc.) will be written out as CDATA sections enclosed in a cdata tag to make XSLT processing easier (see the URL http://www.azureus.com/xml/art_creating_cdata_sections_in_xslt.htm for details on this). Please note that for brevetiy I only included three meta tags per group in the export file.

<?xml version="1.0" encoding="UTF-8" ?>

<files>

<file name="vonWirth-Bild01.jpg">

<filedata>

<metainfo tagname="fullname"><cdata><![CDATA[H:\TestJpgs\Bild01.jpg]]></cdata></metainfo>

<metainfo tagname="size">303100</metainfo>

<metainfo tagname="path"><cdata><![CDATA[H:\TestJpgs]]></cdata></metainfo>

</filedata>

<app0data>

<metainfo tagname="version"><cdata><![CDATA[1.01]]></cdata></metainfo>

<metainfo tagname="units"><cdata><![CDATA[dpi]]></cdata></metainfo>

<metainfo tagname="ythumbnailsize">0</metainfo>

</app0data>

<exifdata>

<metainfo tagname="imagedescription"><cdata><![CDATA[]]></cdata></metainfo>

<metainfo tagname="make"><cdata><![CDATA[SONY]]></cdata></metainfo>

<metainfo tagname="0xa406">0</metainfo>

</exifdata>

<thumbdata>

<metainfo tagname="previewcompression">6</metainfo>

<metainfo tagname="0x010f"><cdata><![CDATA[SONY]]></cdata></metainfo>

<metainfo tagname="previewjpegbytecount">3474</metainfo>

</thumbdata>

<iptcdata>

<metainfo tagname="recordversion"><cdata><![CDATA[2]]></cdata></metainfo>

<metainfo tagname="objectname"><cdata><![CDATA[Meran]]></cdata></metainfo>

<metainfo tagname="keywords"><cdata><![CDATA[Südtirol]]></cdata></metainfo>

</iptcdata>

<gpsdata>

</gpsdata>

</file>

</files>

After you click the OK button, the export will start. Click on Cancel to abort the export.


Einstellungen

Programmeinstellungen

Sie können ImageQuery an Ihre Bedürfnisse anpassen. Wählen Sie dazu einen Bereich aus der Liste unten aus:

  • Anzeigeoptionen (Vorschau, Schriftarten)
  • Programmoptionen und Bestätigungen
  • Verwaltung von Ergebnisaktionen


Einstellungen

Programmeinstellungen

Mit der Auswahl „Ansicht“ / „Einstellungen …“ aus dem Menü können Sie verschiedene Programmeinstellungen verändern. Diese befinden sich auf zwei Reitern eines Dialogfeldes, die Sie unten abgebildet finden.

Bereich Anzeige

Der Reiter „Anzeige“

Thumbnail caption

Diese Information findet sich hier nur zur Erinnerung für den Benutzer. Es gibt keine eigene Einstellunge für die Beschriftung der Vorschaubilder. Die erste spalte der Abfrage definiert automatisch die Beschriftung der Vorschaubilder in der Ergebnisansicht.

Vorschaugrösse

Hier können Sie verschiedene Größen für die Vorschaubilder einstellen. Der EXIF-Standard für Digitalkameras definiert eine feste Vorschaugröße von 160x120 Bildpunkten, daher erhalten Sie mit dieser Einstellungen die optimale Darstellung der Vorschaubilder.

Schriftart Abfrage

Damit stellen Sie die Schriftart für den Abfrage-Editierbereich ein.

Schriftart Ergebnis

Damit stellen Sie die Schriftart für den Ergebnisbereich ein.

Bereich Optionen

Der Reiter „Optionen“

Einstellungen in der Registrierung speichern

Mehr oder weniger zu Testzwecken. Wird diese Option deaktiviert, dann schreibt das Programm seine Einstellungen beim Beenden nicht in die Registry.

Vorschau erzeugen

Falls in einer Datei keine EXIF-Vorschau enthalten ist, kann hiermit dynamisch ein Vorschaubild für die Ergebnisanzeige erstellt werden. Diese Vorschau wird nicht gespeichert und die Originaldatei wird dabei auch nicht verändert, das Bild wird nur für die Ergebnisanzeige verwendet. Achtung: die Aktivierung dieser Funktion verlangsamt das Programm bei fehlenden Vorschaubildern erheblich! Falls Sie dies bei 1000 Bildern machen, sollten Sie ein gutes Buch zur Hand haben. ;-)

Diesen Text für Nullwerte

Falls in einer Datei keine Informationen zu einem Metadatenfeld vorhanden sind, kann hier ein Ersatztext eingestellt werden. Ohne die Definition eines Ersatztextes wird einfach eine Leerspalte ausgegeben (die dann vielleicht mit einem Leerzeichen verwechselt werden könnte). Daher ist hier die Eingabe einer Kennezeichnung möglich. Das An- und Abschalten dieser Option ändert den definierten Ersatztext nicht, daher können Sie ruhig experimentieren.

Kein Nachfragen beim Beenden

Naja, falls Sie beim Beenden des Programms keine Nachfrage erhalten wollen, ob das Programm wirklich beendet werden soll.

Grenzwert von ### Treffern aktivieren

Manche Anfragen liefern zu viele Treffer, um noch sinnvoll verwendbar zu sein. Mit dem Aktivieren dieser Option können Sie eine Obergrenze festlegen, ab der eine Warnung ausgegeben und die Abfrage beendet wird. Als Kennung wird dies in der Statusleiste bei der Anzahl der Treffer auch durch den Zusatz „(Hitlimit!)“ angezeigt. Auch hier bleibt der im Eingabefeld definierte Zahlenwert unabhängig vom Aktivieren oder Deaktivieren der Option erhalten.

Doppelte Anführungszeichen als Stringbegrenzer (Neu ab 1.2.1)

Falls diese Option angeklickt ist, wird als Begrenzungszeichen für Zeichenkettenkonstanten das doppelte Anführungszeichen verwendet. Der Standardwert ist das einfache Anführungszeichen. Diese Option wurde eingeführt, um mehr Konsiszenz zur FROM-Klausel herzustellen, deren Dateimaske bei Sonderzeichen oder Leerzeichen mit doppelten Anführungszeichen begrenzt wird (dies ist der Standard unter Windows). SQL-Benutzer werden wahrscheinlich lieber die einfachen Anführungszeichen benutzen.

Bereich Aktionen

Der Reiter „Aktionen“.

Hier können Sie eigene Aktionen definieren, die für ausgewählte Dateien der Ergebnismenge ausgeführt werden sollen. Die Schaltfläche „Löschen“ entfernt die markierte Aktion, während die Schaltflächen „Hinzufügen“ und „Ändern“ das Dialogfeld für die Bearbeitung einer Aktion anzeigen.


SyntaxStart

Systemanforderungen und Installation

Suchausdrücke

Beim Entwurf der Schreibweise für die Suchausdrücke habe ich mich so weit als möglich an gängige Programmiersprachen angepasst, dabei aber auch auf Lesbarkeit für Endanwender geachtet. Falls Sie bereits einmal eine SQL-Abfrage gesehen haben, ist die Abfragesprache von ImageQuery eine Sache von wenigen Minuten. Für alle Einsteiger finden sich in den folgenden Abschnitten detaillierte Erläuterungen.

Allgemeine Syntax

Die allgemeine Syntax folgt dem nachfolgenden Schema. Die Schlüsselwörter sind nur der Unterscheidung halber in Großbuchstaben geschrieben, ImageQuery macht bei der Bearbeitung keinen Unterschied zwischen Groß- und Kleinschreibung. Optionale Angaben sind in eckige Klammern eingeschlossen.

SELECT <spaltenliste>
FROM <dateimaske>
[ WHERE <filterausdruck> ]
[ WITH <optionen> ]

Ein einfaches Beispiel

Nehmen wir folgendes Szenario an: Sie suchen im Ordner c:\bilder nach allen Dateien, die einen JPG-Kommentar besitzen (wie Sie in beispielsweise mit dem Programm Irfan-View eintragen können). Dazu benötigen Sie folgenden Aufruf:

SELECT Name, Size, Caption
FROM c:\bilder\*.jpg
WHERE where "JpgComment != '' "

Eine einfache Abfrage

Wie Sie die Ausgabe verändern können, erfahren Sie in den nächsten Abschnitten. Doch zuerst müssen wir uns mit der Syntax für einen Suchausdruck beschäftigen. Diese Suchausdrücke bestehen aus Werten, Variablen oder Funktionen, die durch Operatoren miteinander verknüpft sind. Ein einfacher Ausdruck ist beispielsweise 4 < 7: zwei Werte, die durch einen Operator verknüpft werden. Das Ergebnis ist der logische Wert Wahr. Der Ausdruck Size * 2 hat als Ergebnis einen nummerischen Wert, der dem Doppelten des Inhalts des feldes Size entspricht. Die folgenden Abschnitte beschreiben die einzelnen Elemente eines Ausdrucks im Detail.


SELECT

SELECT-Klausel

Beschreibung

Mit der SELECT-Klausel legen Sie fest, welche Spalten in der Ausgabe erscheinen sollen. Sie können dazu konstante Werte, Feldnamen oder Ausdrücke verwenden, die jeweils durch ein Komma getrennt werden.

SELECT <spalte1> [ , <spalte2> ] ...

Die erste Spalte nach dem Schlüsselwort SELECT legt die Bezeichnung fest, die im Vorschaubild- oder Listenmodus verwendet wird. Normalerweise ist dies der Name der Datei, der Bildtitel oder ein Ausdruck, der eine Identifikation der Vorschaubilder erlaubt.

Beispiele

Die folgenden Beispiele sind nur eine kleine Anregung, was mit dem Programm alles möglich ist. Ich bin sicher, dass Sie noch viele weitere Einsatzmöglichkeiten finden werden. Beachten Sie bitte, dass jedes Beispiel nur den SELECT-Teil einer Abfrage zeigt.

Ausgabe von Name, Blende und Verschlusszeit, jeweils getrennt durch Kommata:

select Name, FNumber, ShutterSpeedValue

Ausgabe von Name und den Stichwörtern in Großschreibung:

select Name & ' ' & Upper(Keywords)

Ausgabe von Dateiname ausgerichtet 32 Zeichen breit und Dateigröße, zusammen in einer Spalte

select Pad(name, 32) & ' ' & Size

Hier ein Beispiel für eine kleine Statistik: Für alle Dateien wird das Kameramodell, die Brennweite und der Dateiname angegeben:

select Model, Pad(FocalLength, 4) & ' mm', Name"

Erst den Namen, dann jeweils den IPTC-Copyrightvermerk ausgeben bzw. „KeinCopyright“ bei fehlendem Metadateneintrag:

select Name, IsNull(CopyrightNotice, 'KeinCopyright')


FROM

FROM-Klausel

Beschreibung

Die FROM-Klausel legt fest, welche Dateien in die Suche mit einbezogen werden. In den meisten Fällen wird dies eine Suchmaske der Form *.jpg oder ähnlich sein.

Falls in der Dateimaske Leerzeichen oder Sonderzeichen vorkommen, muss die Suchmaske in doppelte Anführungszeichen eingeschlossen werden (wie auf der Kommandozeile).

Beispiele

Beachten Sie bitte, das die folgenden Beispiele keine komplette Abfrage, sondern nur den FROM-Teil darstellen.

Alle JPG-Bilder im Ordner „bilder“ des Laufwerks C:

FROM c:\bilder\*.jpg

Alle JPGs, die mit IMG... beginnen, im Ordner „Eigene Bilder“

FROM "c:\Dokumente und Einstellungen\Armin\Eigene Bilder\IMG*.jpg"

Alle JPG-Dateien unterhalb von c:\tmp (inklusive Unterordner)

FROM c:\tmp\*.jpg (…evtl. WHERE…) WITH subdirs


WHERE

WHERE-Klausel

Beschreibung

Die WHERE-Klausel definiert optional eine Filterbedingung, die erfüllt sei muss, damit eine Datei zur Ergebnisliste hinzugefügt wird. Damit lassen sich die in der Dateimaske angegebenen Dateien weiter einschränken.

Beispiele für Suchausdrücke

Bitte beachten Sie bei den nachfolgenden Beispielen, dass es sich nicht um komplette Abfragen, sondern immer nur um den WHERE-Teil handelt.

Gesucht sind alle Dateien, die einen Kommentar in der JPG-Datei enthalten und deren Größe unter 100000 Byte liegt:

where (JpgComment != '') and (size < 100000)

Alle Bilder mit einer Verschlusszeit von 1/500 Sekunde oder eine Blende größer 8:

where (ShutterSpeedValue == '1/500') or (FNumber > 8)

Sucht alle Bilder, die nicht von “Greg Miller” sind und gleichzeitig als Land Deutschland eingetragen haben:

where (ByLine != 'Greg Miller') and (CountryName == 'Deutschland')

Alle Bilder aus dem Mai 2004:

where (DatePart('month', DateTimeOriginal) == 5) and (DatePart('year', DateTimeOriginal) == 2004)

Alle Dateien, die in der Überschrift (caption) den Text Urlaub enthalten, unabhängig von Groß- oder Kleinschreibung:

where Upper(caption) == 'URLAUB'


WITH

WITH-Klausel

Beschreibung

Dies ist der einfachste Teil der Suchanfrage, da derzeit nur eine Option implementiert ist. Falls sie WITH subdirs angeben, wird ausgehend vom Startodner auch jeder Unterordner rekursiv mit in die Suche einbezogen.


Werte und Operatoren

Werte

Ein Wert ist entweder eine Konstante, wie z.B. 42 oder 'Franz' oder der Name eines Metadaten-Feldes. Werte sind entweder Zahlen, Strings (in einfache Hochkommata eingschlossene Zeichenketten) oder logische Werte (wobei true für Wahr und false für Falsch steht). Die Angabe ShutterSpeedValue würde also dazu führen, dass ImageQuery aus dem aktuellen Bild versucht, die Verschlusszeit zu lesen und diesen Wert dann einsetzt. Ist in der aktuellen Datei kein Feld für die Verschlusszeit enthalten, wird der Ausdruck als logisch falsch gewertet (schliesslich suchen Sie ja nach einer bestimmten Verschlusszeit).

Operatoren

Operatoren verknüpfen Werte miteinander, wie beispielsweise der Operator für die Addition (das „+“). Folgende Operatoren werden von ImageQuery unterstützt:

+ - * / Die vier Grundrechenarten.

< <= „Kleiner als“ und „lleiner oder gleich“

> >= „Größer als“ und „größer oder gleich“

==  != „Ist gleich“ und „Ist ungleich“

~ Enthält den nachfolgenden Text (z.B. keywords ~ 'mond')

& Verbindet Werte (wird für die Ausgabe benötigt)

and Logisches UND

or Logisches ODER

not Logisches NICHT

(  ) Gruppierung durch Klammern


Funktionen

ImageQuery unterstützt folgende Funktionen für SELECT- und WHERE-Ausdrücke:

Upper() Wandelt einen String in Großschreibung um
Beispiel: Upper('karl')

Lower() Wandelt einen String in Kleinschreibung um
Beispiel: Lower(Copyright)

Pad() Sorgt für eine Breitenangleichung. Diese Funktion erwartet zwei Parameter, einen String und als zweiten Parameter eine Breite. Ist der Wert für die Breite positiv, wird der Wert rechts im Feld angeordnet, negative Werte für die Breite ordnen den Wert linksbündig im Feld an.
Beispiel: Pad(Name, 32)

DatePart()    Berechnet einen Datumsanteil aus Feldern mit Datumsangaben (wie z.B. dem Feld DateTimeDigitized). Diese Funktion erwartet zwei Parameter: zuerst einen String mit dem gewünschten Datumsteil, danach einen String oder ein Feld mit einem Datumswert. Achtung: es erfolgt keine Prüfung, ob es sich bei dem Feld auch wirklich um ein Datumsfeld handelt! Als Datumsteil kann einer der String aus der folgenden Liste angegeben werden: 'DAY', 'MONTH', 'YEAR', 'HOUR', 'MIN', 'SEC'
Beispiel: DatePart('month', DateTimeOriginal)

IsNull()      Diese Funktion erwartet als ersten Parameter ein Metadatenfeld. Ist diese Metadateninformation in der aktuellen Datei nicht enthalten, wird als Funktionsergebnis der zweite Parameter geliefert, ansonsten der unveränderte Metadatenwert. Damit lassen sich in Dateien fehlende Angaben mit einem benutzerdefinierten Wert ausgeben, wie beispielsweise „Keine Daten“.
Beispiel: IsNull(ImageDescription, 'kein Bildtitel')

If() Diese Funktion ermöglicht die bedingte Ausgabe von Informationen. If() erwartet drei Parameter: eine Testbedingung, das Ergebnis für Wahr, das Ergebnis für Falsch.
Beispiel: If(Size < 1475000, 'Floppy OK', 'Zu gross')

Ascii() Erzeugt das ASCII-Zeichen mit dem angegebenen Code. Der Code muss im Bereich von 0–255 liegen. Werte ausserhalb dieses Bereichs werden in Bytewerte umgeformt.
Beispiel: Ascii(34)

Match() Diese Funktion ermöglicht den Test eines Strings auf Übereinstimmung mit einem regulären Ausdruck. Falls eine Übereinstimmung vorliegt, liefert die Funktion TRUE, sonst FALSE
Beispiel: Match(caption, '[CK]omputer’)


Syntax of Regular Expressions

Note from the author: this sections explains the usage of regular expressions for the Match() function. This is shortened end-user version of the complete developer documentation for the Delphi library that implements this feature. Library code and documentation are © 2004 Andrey V. Sorokin, Saint Petersburg, Russia.

Introduction

Regular Expressions are a widely-used method of specifying patterns of text to search for. Special metacharacters allow You to specify, for instance, that a particular string You are looking for occurs at the beginning or end of a line, or contains n recurrences of a certain character.

Regular expressions look ugly for novices, but really they are very simple (well, usually simple ;) ), handly and powerfull tool.

Simple matches

Any single character matches itself, unless it is a metacharacter with a special meaning described below.

A series of characters matches that series of characters in the target string, so the pattern "bluh" would match "bluh'' in the target string. Quite simple, eh ?

You can cause characters that normally function as metacharacters or escape sequences to be interpreted literally by 'escaping' them by preceding them with a backslash "\", for instance: metacharacter "^" match beginning of string, but "\^" match character "^", "\\" match "\" and so on.

Examples:

  foobar          matchs string 'foobar'

  \^FooBarPtr     matchs '^FooBarPtr'

Escape sequences

Characters may be specified using a escape sequences syntax much like that used in C and Perl: "\n'' matches a newline, "\t'' a tab, etc. More generally, \xnn, where nn is a string of hexadecimal digits, matches the character whose ASCII value is nn. If You need wide (Unicode) character code, You can use '\x{nnnn}', where 'nnnn' - one or more hexadecimal digits.

  \xnn     char with hex code nn

  \x{nnnn} char with hex code nnnn (one byte for plain text and two bytes for Unicode)

  \t       tab (HT/TAB), same as \x09

  \n       newline (NL), same as \x0a

  \r       car.return (CR), same as \x0d

  \f       form feed (FF), same as \x0c

  \a       alarm (bell) (BEL), same as \x07

  \e       escape (ESC), same as \x1b

Examples:

  foo\x20bar   matchs 'foo bar' (note space in the middle)

  \tfoobar     matchs 'foobar' predefined by tab

Character classes

You can specify a character class, by enclosing a list of characters in [], which will match any one character from the list.

If the first character after the "['' is "^'', the class matches any character not in the list.

Examples:

  foob[aeiou]r   finds strings 'foobar', 'foober' etc. but not 'foobbr', 'foobcr' etc.

  foob[^aeiou]r  find strings 'foobbr', 'foobcr' etc. but not 'foobar', 'foober' etc.

Within a list, the "-'' character is used to specify a range, so that a-z represents all characters between "a'' and "z'', inclusive.

If You want "-'' itself to be a member of a class, put it at the start or end of the list, or escape it with a backslash. If You want ']' you may place it at the start of list or escape it with a backslash.

Examples:

  [-az]      matchs 'a', 'z' and '-'

  [az-]      matchs 'a', 'z' and '-'

  [a\-z]     matchs 'a', 'z' and '-'

  [a-z]      matchs all twenty six small characters from 'a' to 'z'

  [\n-\x0D]  matchs any of #10,#11,#12,#13.

  [\d-t]     matchs any digit, '-' or 't'.

  []-a]      matchs any char from ']'..'a'.

Metacharacters

Metacharacters are special characters which are the essence of Regular Expressions. There are different types of metacharacters, described below.

Metacharacters - line separators

  ^      start of line

  $      end of line

  \A     start of text

  \Z     end of text

  .      any character in line

Examples:

  ^foobar     matchs string 'foobar' only if it's at the beginning of line

  foobar$     matchs string 'foobar' only if it's at the end of line

  ^foobar$    matchs string 'foobar' only if it's the only string in line

  foob.r      matchs strings like 'foobar', 'foobbr', 'foob1r' and so on

The "^" metacharacter by default is only guaranteed to match at the beginning of the input string/text, the "$" metacharacter only at the end. Embedded line separators will not be matched by "^'' or "$''.

You may, however, wish to treat a string as a multi-line buffer, such that the "^'' will match after any line separator within the string, and "$'' will match before any line separator. You can do this by switching On the modifier /m .

The \A and \Z are just like "^'' and "$'', except that they won't match multiple times when the modifier /m is used, while "^'' and "$'' will match at every internal line separator.

The ".'' metacharacter by default matches any character, but if You switch Off the modifier /s , then '.' won't match embedded line separators.

TRegExpr works with line separators as recommended at www.unicode.org ( http://www.unicode.org/unicode/reports/tr18/ ):

"^" is at the beginning of a input string, and, if modifier /m is On, also immediately following any occurrence of \x0D\x0A or \x0A or \x0D (if You are using Unicode version of TRegExpr, then also \x2028 or \x2029 or \x0B or \x0C or \x85). Note that there is no empty line within the sequence \x0D\x0A.

"$" is at the end of a input string, and, if modifier /m is On, also immediately preceding any occurrence of \x0D\x0A or \x0A or \x0D (if You are using Unicode version of TRegExpr, then also \x2028 or \x2029 or \x0B or \x0C or \x85). Note that there is no empty line within the sequence \x0D\x0A.

"." matchs any character, but if You switch Off modifier /s then "." doesn't match \x0D\x0A and \x0A and \x0D (if You are using Unicode version of TRegExpr, then also \x2028 and \x2029 and \x0B and \x0C and \x85).

Note that "^.*$" (an empty line pattern) doesnot match the empty string within the sequence \x0D\x0A, but matchs the empty string within the sequence \x0A\x0D.

Multiline processing can be easely tuned for Your own purpose with help of TRegExpr properties LineSeparators and LinePairedSeparator , You can use only Unix style separators \n or only DOS/Windows style \r\n or mix them together (as described above and used by default) or define Your own line separators!

Metacharacters - predefined classes

  \w     an alphanumeric character (including "_")

  \W     a nonalphanumeric

  \d     a numeric character

  \D     a non-numeric

  \s     any space (same as [ \t\n\r\f])

  \S     a non space

You may use \w, \d and \s within custom character classes.

Examples:

  foob\dr     matchs strings like 'foob1r', ''foob6r' and so on but not 'foobar', 'foobbr' and so on

  foob[\w\s]r matchs strings like 'foobar', 'foob r', 'foobbr' and so on but not 'foob1r', 'foob=r' and so on

TRegExpr uses properties SpaceChars and WordChars to define character classes \w, \W, \s, \S, so You can easely redefine it.

Metacharacters - word boundaries

  \b     Match a word boundary

  \B     Match a non-(word boundary)

A word boundary (\b) is a spot between two characters that has a \w on one side of it and a \W on the other side of it (in either order), counting the imaginary characters off the beginning and end of the string as matching a \W.

Metacharacters - iterators

Any item of a regular expression may be followed by another type of metacharacters - iterators. Using this metacharacters You can specify number of occurences of previous character, metacharacter or subexpression.

  *      zero or more ("greedy"), similar to {0,}

  +      one or more ("greedy"), similar to {1,}

  ?      zero or one ("greedy"), similar to {0,1}

  {n}    exactly n times ("greedy")

  {n,}   at least n times ("greedy")

  {n,m}  at least n but not more than m times ("greedy")

  *?     zero or more ("non-greedy"), similar to {0,}?

  +?     one or more ("non-greedy"), similar to {1,}?

  ??     zero or one ("non-greedy"), similar to {0,1}?

  {n}?   exactly n times ("non-greedy")

  {n,}?  at least n times ("non-greedy")

  {n,m}? at least n but not more than m times ("non-greedy")

So, digits in curly brackets of the form {n,m}, specify the minimum number of times to match the item n and the maximum m. The form {n} is equivalent to {n,n} and matches exactly n times. The form {n,} matches n or more times. There is no limit to the size of n or m, but large numbers will chew up more memory and slow down r.e. execution.

If a curly bracket occurs in any other context, it is treated as a regular character.

Examples:

  foob.*r     matchs strings like 'foobar', 'foobalkjdflkj9r' and 'foobr'

  foob.+r     matchs strings like 'foobar', 'foobalkjdflkj9r' but not 'foobr'

  foob.?r     matchs strings like 'foobar', 'foobbr' and 'foobr' but not 'foobalkj9r'

  fooba{2}r   matchs the string 'foobaar'

  fooba{2,}r  m atchs strings like 'foobaar', 'foobaaar', 'foobaaaar' etc.

  fooba{2,3}r matchs strings like 'foobaar', or 'foobaaar' but not 'foobaaaar'

A little explanation about "greediness". "Greedy" takes as many as possible, "non-greedy" takes as few as possible. For example, 'b+' and 'b*' applied to string 'abbbbc' return 'bbbb', 'b+?' returns 'b', 'b*?' returns empty string, 'b{2,3}?' returns 'bb', 'b{2,3}' returns 'bbb'.

You can switch all iterators into "non-greedy" mode (see the modifier /g ).

Metacharacters - alternatives

You can specify a series of alternatives for a pattern using "|'' to separate them, so that fee|fie|foe will match any of "fee'', "fie'', or "foe'' in the target string (as would f(e|i|o)e). The first alternative includes everything from the last pattern delimiter ("('', "['', or the beginning of the pattern) up to the first "|'', and the last alternative contains everything from the last "|'' to the next pattern delimiter. For this reason, it's common practice to include alternatives in parentheses, to minimize confusion about where they start and end.

Alternatives are tried from left to right, so the first alternative found for which the entire expression matches, is the one that is chosen. This means that alternatives are not necessarily greedy. For example: when matching foo|foot against "barefoot'', only the "foo'' part will match, as that is the first alternative tried, and it successfully matches the target string. (This might not seem important, but it is important when you are capturing matched text using parentheses.)

Also remember that "|'' is interpreted as a literal within square brackets, so if You write [fee|fie|foe] You're really only matching [feio|].

Examples:

  foo(bar|foo)  matchs strings 'foobar' or 'foofoo'.

Metacharacters - subexpressions

The bracketing construct ( ... ) may also be used for define r.e. subexpressions (after parsing You can find subexpression positions, lengths and actual values in MatchPos, MatchLen and Match properties of TRegExpr, and substitute it in template strings by TRegExpr.Substitute ).

Subexpressions are numbered based on the left to right order of their opening parenthesis.

First subexpression has number '1' (whole r.e. match has number '0' - You can substitute it in TRegExpr.Substitute as '$0' or '$&').

Examples:

  (foobar){8,10}  matchs strings which contain 8, 9 or 10 instances of the 'foobar'

  foob([0-9]|a+)r matchs 'foob0r', 'foob1r' , 'foobar', 'foobaar', 'foobaar' etc.

Metacharacters - backreferences

Metacharacters \1 through \9 are interpreted as backreferences. \<n> matches previously matched subexpression #<n>.

Examples:

  (.)\1+         matchs 'aaaa' and 'cc'.

  (.+)\1+        also match 'abab' and '123123'

  (['"]?)(\d+)\1 matchs '"13" (in double quotes), or '4' (in single quotes) or 77 (without quotes) etc

Perl extensions

(?imsxr-imsxr)

You may use it into r.e. for modifying modifiers by the fly. If this construction inlined into subexpression, then it effects only into this subexpression

Examples:

  (?i)Saint-Petersburg       matchs 'Saint-petersburg' and 'Saint-Petersburg'

  (?i)Saint-(?-i)Petersburg  matchs 'Saint-Petersburg' but not 'Saint-petersburg'

  (?i)(Saint-)?Petersburg    matchs 'Saint-petersburg' and 'saint-petersburg'

  ((?i)Saint-)?Petersburg    matchs 'saint-Petersburg', but not 'saint-petersburg'

(?#text)

A comment, the text is ignored. Note that TRegExpr closes the comment as soon as it sees a ")", so there is no way to put a literal ")" in the comment.


Metadaten-Felder

Das Programm dient der Suche nach Metadaten in JPEG-Bildern. Metadaten sind beschreibende Zusatzdaten zu den eigentlichen Bildinformationen. Diese werden zum Großteil bereits von den Digitalkameras in die Bilddateien eingetragen, können aber auch nachträglich durch entsprechende Programm verändert oder ergänzt werden.

Dateifelder

Diese enthalten Daten über die jeweilige Datei. Aus Gründen der Einfachheit wurde in diese Gruppe auch der JPG-Kommentar einer Datei übernommen.

EXIF-Felder

Diese Metadaten enthalten Angaben der Digitalkamera und über das Bild. Hier finden Sie alles von der Verschlusszeit über die Blende, das Datum der Aufnahme oder den Weißabgleich. Allerdings schreibt nicht jede Kamera alle Felder und einige Modellen schreiben noch zusätzliche Daten (die sogenannten Makernotes) in die Datei. Diese sind allerdings nicht standardisiert und werden von ImageQuery momentan noch nicht ausgelesen.

IPTC-Felder

Diese Felder werden vor allem von professionellen Fotofgrafen und Bildredaktueren benutzt. Neben Angaben zum Künstler, dem Copyright und dem Verarbeitungsstatus finden Sie hier auch Daten über den Ort der Aufnahme und einzelne Stichwörter. Diese Daten werden nicht von der Digitalkamera, sondern mit entsprechender Software (wie z.B. Adobe Photoshop, Exifer, IrfanView oder Bilddatenbanken) eingetragen.

Liste der Feldnamen

  • EXIF-Felder
  • IPTC-Felder
  • FILE-Felder


NULL-Werte

Grundlagen

Als Null-Werte werden in der EDV (vor allem im Datenbankbereich) undefinierte Werte bezeichnet. Dies ist nicht der nummerische Wert 0 (weshalb „Null“ auch zur Unterscheidung ausgeschreiben wird), sondern einfach ein nicht vorhandener Wert. Wenn Sie beispielsweise die folgende Abfrage ausführen:

SELECT Name, ImageWidth, ImageHeight FROM *.jpg

kann es durchaus der Fall sein, dass einige JPG-Dateien keine EXIF-Informationen tragen und deshalb kein Wert für „ImageWidth“ vorhanden ist. Dieser liefert dann einen Null-Wert zurück. Auf diesen Wert können Sie in Abfragen testen und so bestimmte Ersatzwerte oder einen Hinweistext ausgeben. ImageQuery erlaubt in den Einstellungen die Definition eines Standardwertes für solche Null-Werte.

Einsatzmöglichkeiten

Sehen wir uns folgende Abfrage an:

SELECT Name, IsNull(CopyrightNotice, 'kein Copyright!') FROM *.jpg WHERE ByLine != ''

Hier wird mit Hilfe der Funktion IsNull() geprüft, ob das Feld CopyrightNotice einen Nullwert liefert (d.h. keine Informationen dieses Typs in der aktuellen Datei enthalten sind). Ist das der Fall, wird der Text „kein Copyright!“ ausgegeben.

Eine andere Möglichkeit sind auch Abfragen, die alternativ ein zweites Feld abfragen. Da der EXIF- und auch der IPTC-Standard durchaus Möglichkeiten zur „unkonventionellen Auslegung“ bieten, finden sich grundlegende Bilddateien oft zweimal. Ein Beispiel ist die Verschlusszeit: diese finden Sie entweder im EXIF-Feld ExposureTime oder in ShutterSpeedValue. Manche Kameramodelle tragen nur in einem Feld den Wert ein. Liefert das erste Feld also einen Nullwert, kann mit der Funktion IsNull() einfach das zweite Feld abgefragt werden, wie das folgende Beispiel zeigt:

SELECT Name, IsNull(ShutterSpeedValue, ExposureTime) FROM *.jpg

Sie sehen, es ist erstens notwendig und zweitens lohnen, sich mit dem Thema Nullwerte zu beschäftigen. Weitere Informationen und Anregungen finden Sie auch bei der Beschreibung der Funktionen.


Über Midnight!Software

Midnight!Software ist ein Weg, um ein wenig der Ideen, Tipps und Unterstützung zurückzugeben, die ich in den letzten zwanzig Jahren der Arbeit mit Computern erhalten habe. Obwohl ich nicht mehr hauptberudlich programmiere, kann ich die Finger doch nicht lange von Notizbuch und Tastatur lassen. Dies ist eine Art mentales Training und Erholung für mich, wie Schach spielen oder Fotografieren. Daher sind alle Programme, die ich in meiner Freizeit erstelle, Freeware. Vielleicht sind Sie für den einen oder anderen von Nutzen. Während ich keine Ahnung habe, ob noch irgendwo eine Kopie meines ersten Programms existiert (ein DNA Triplet/Aminosäuren-Konverte für den PET2001), finden Sie vielleicht das eine oder andere neue Stück Software von mir im Netz. Viel Spass damit!

http://www.ArminHanisch.de


Credits

Danke!

Dieses Programm würde es ohne die vielen netten Leute nicht geben, die im Web Informationen und Codebeispiele über die EXIF- und IPTC-Datenformate veröffentlicht haben. Danke an Heinz Fischer für das Testen der Vorversionen und für wertvolle Anregungen zur Funktionalität des Programms.

Ich möchte an dieser Stelle Douglas Gregor und Thomas Niemann für die Veröffentlichung ihrer Arbeiten zum Parserdesign danken und natürlich den drei Autoren Aho / Sethi / Ullmann für ihr berühmtes „Drachenbuch“ zum Thema Compilerbau.

Der Code für die Ansteuerung der Microsoft HTML-Hilfe von Delphi aus wurde großzügigerweise von Robert Chandler von The Helpware Group (http://www.Helpware.net) zur Verfügung gestellt.

Die Bibliothek für die Unterstützung der regulären Ausdrücke basiert auf einer Bibliothek © 2000 by Andrey V. Sorokin, die wiederum auf den VB Routinen von Henry Spencer, Copyright © 1986 University of Toronto, aufbaut.

Ein besonderes Dankeschön geht an dieser Stelle an Tim Bishop (http://www.TimBishop.com), der die englische Version der Dokumentation sorgfältig überarbeitet und korrekturgelesen hat. Als deutscher Benutzer haben Sie nicht viel davon, aber wenn der Text für englischsprachige Benutzer Sinn macht, ist dies hauptsächlich Tims Verdienst.

John Perkins hatte die Idee für den XML Export und übernahm dankenswerterweise den Test. Von ihm stammen wertvolle Hinweise, die eine XSLT-Verarbeitung sicherlich erleichtern. Thanks again, John!

Special thanks also to: Saeco, Café Kimbo, Cantina Sella & Mosca, Ardbeg für die Unterstützung meines Stoffwechsels bei der Programmierung!


Aktionsdatei

Technische Informationen zur Anpassung

Wer sollte diesen Abschnitt lesen?

Dieser Abschnitt beschreibt technische Details zu ImageQuery, die für weitergehende Anpassungen gedacht sind. Die Informationen in diesem Abschnitt sind für fortgeschrittene Benutzer oder Administratoren gedacht. Endanwender werden diesen Abschnitt eher langweilig finden.

Wo legt ImageQuery Dateien ab?

ImageQuery benötigt keinen Schreibzugriff auf das Programmverzeichnis. Alle benutzerspezifischen Anpassungen erfolgen in der Registry unter dem Wurzelschlüssel HKEY_CURRENT_USER oder unterhalb des Ordners für Anwendungsdaten des aktuellen Benutzers, der durch die Umgebungsvariable APPDATA festgelegt wird.

Dateien im Anwendungsordner

Falls die Umgebungsvariable APPDATA nicht auf einen gültigen Pfad zeigt (an den dann „\Midnight!Software\ImageQuery“) angehängt wird, werden die hier aufgelisteten Dateien weder gelesen noch geschrieben. Die Funktionalität für den Abfragepuffer und die Ergebnisaktionen steht dann nicht zur Verfügung.

ResultActions.ini

Diese Datei enthält die Definitionen für benutzerdefinierte Ergebnisaktionen. Das Format der Datei ist das einer normalen INI-Datei. Jeder Abschnitt definiert eine Aktion. Hier ein Beispiel:

[Action42]

Menu=IrfanView

Program=C:\Programme\IrfanView\i_view32.exe

CmdLine=$filename

Shortcut=ALT+I

Ein Beispiel für die Definition einer Aktion

Der Name des Abschnitts (hier „Action42“) wird von ImageQuery jeweils dynamisch vergeben und sollte nicht geändert werden. Für die Definition des Tastenkürzels (shortcut) gelten folgende Regeln: erlaubte Umschaltnamen sind CTRL / ALT / SHIFT, danach ein Pluszeichen, danach der Name der Taste (erlaubt sind 0-9 und A-Z). Wird dies nicht eingehalten, kann das Programm unerwartet reagieren.

Querylist.txt

Enthält eine Liste mit Abfragen für den Abfragepuffer. Jede Zeile beginnt mit dem Namen der Abfrage, der dann in der Combobox erscheint. Danach folgt ein Gleichheitszeichen, danach der Text der Abfrage, wobei alle Zeilenschaltungen durch den vertikalen Strich („|“) ersetzt werden. Dies bedeutet natürlich auch, dass in einer Abfrage keine solchen „vertical bars“ vorkommen können. Hier ein Beispiel:

Select Name, Size, Caption|from c:\tmp\*.jpg|where Caption != ''

Ein Beispiel für eine Abfrage im Puffer

Sidetree.ini

Diese Datei enthält benutzerspezifische Inhalte für die Feldliste. Falls diese Datei im Anwendungsdaten-Ordner nicht vorhanden ist, wird nach einer zentralen Datei im Programmordner von ImageQuery gesucht und diese verwendet.

Registry-Werte

ImageQuery legt seine Informationen unter folgendem Schlüssel in der Registrierung ab:

HKEY_CURRENT_USER\Software\Midnight!Software\ImageQuery\1.0

Folgende Werte sind derzeit vorhanden und können auch z.B. über Gruppenrichtlinien gesetzt werden:

LastQuery | REG_SZ | Der Text der jeweils letzten Query
ThumbnailWidth | REG_DWORD | Breite der Vorschaubilder in Pixel (sollte 160, 120 oder 90 sein)
ThumbnailHeight | REG_DWORD | Höhe der Vorschaubilder in Pixel (sollte 120, 90 oder 66 sein)
GeneratePreview | REG_DWORD | 1 = Vorschau erzeugen, falls kein EXIF-Thumbnail (Vorsicht, sehr langsam)
UseNullText | REG_DWORD | 1 = Den Inhalt von NullText verwenden
NullText | REG_SZ | Ersatztext für Nullwerte (nicht vorhandene Metadatenfelder)
DontAskOnExit | REG_DWORD | 1 = Beim Beenden nicht nachfragen
RefinementLimit | REG_DWORD | Anzahl der maximalen Treffer, bevor eine Abfrage abgebrochen wird, falls EnforceRefinement auf 1 gesetzt wurde
EnforceRefinement | REG_DWORD | 1 = Abfragebegrenzung aktiv (s. RefinementLimit)
QueryFontFace | REG_SZ | Schriftartname
QueryFontSize | REG_DWORD | Schriftartgöße
ResultFontFace | REG_SZ | Schriftartname
ResultFontSize | REG_DWORD | Schriftartgröße
ResultViewStyle (neu ab 1.1) | REG_SZ | Detail = Spaltendarstellung List = Liste Preview = Vorschaubilder

Liste der Werte in der Registry

Sonstige Informationen

Hier finden Sie weitere Informationen zur internen Arbeitsweise von ImageQuery. Da ich die interne Dokumentation und die Codekommentare alle in Englisch schreibe, sind die hier eingefügten Kopien ebenfalls Englisch. Da es sich um technische Internas handelt, gehe ich einfach davon aus, dass alle, die mit dieser Information etwas anfangen könnten, auch Englisch können. :-)

Localizing ImageQuery

ImageQuery can be localized for other languages. In contrast to other freeware apps, you can also adjust layout and sizing of controls to make the text fit into place. All language files hasve to be stored in a subfolder under the ImageQuery application folder. This folder has to be named “Lang”.

Language files are simple text files with an INI-file layout. The section names define the forms, while key name specify controls on a form. Names are self-explanatory. Additionally you may want to check the German and English localization file. The language file has to be named according to the short country codes for Windows locales plus the extension “.lng” (e.g. en-us.lng for English, es-es.lng for spanish-Spain, but ca.lng for Catalan or el.lng for Greek).

You can have comments in the file. All lines starting with a semi-colon “;” are considered comments and ignored.

Languages may be changed at run-time without problem. You may start the program with a given locale by providing the command line option /lcid:<code>, where <code> is the LCID number for a given language in decimal, e.g. 1031 for de-de (German-Germany) or 1033 for en-us (English-United States).

The author would like to receive a copy of you translation file to provide it for download to other users. You can of course provide a comment section in the beginning of the file stating your name and eMail-Adress and/or web link to show that you did all the work.

Test for valid jpg files

ImageQuery tries to detect if a file really is a JPEG image before processing it. This will prevent program crashes (if you accidentally use a file mask like *.doc) and allows you to use different extensions or file masks (like *.jp*). To qualify for a valid JPEG image,

• the files has to start with 0xFF, 0xD8.

• the JFIF segment marker 0xFF, 0xE0 must be found.

• the Image data marker 0xFF, 0xDB must be found.

Note: the specifications avialabe do state that every valid JPG or DCF (digital camera format) file has to end with the end marker sequence 0xFF, 0xD9 as the last two bytes. While the majority of image files I encountered during testing follwed that rule, a remarkable number of files did not. Instead they padded the file after the end marker to some border (mostly the next 256 byte). Therefore I decided not to test for the end marker, as you may miss some image files during searching. Any comments or additional information on that subject would be appreciated.


Working with the sidebar

Introduction

As one reviewer put it , “edit the query is great, but who remembers all those field names?”. This is the reason I implemented a collapsible sidebar to give users an easy access to field names. Best of all, the contents of the sidebar can be re-arranged freely and you can add you own quick tip, if you like (learn more customizing the sidebar definition file here).

Activating the sidebar

You may activate the sidebar by using the menu option “View” / “Toggle sidebar” (the shortcut key is [F11]) or by using the toolbar. This action is a toggle switch, so executing that option again hides the sidebar again. Below is a screen shot with the sidebar visible at left side of the screen.

Activating the sidebar.

Using the sidebar

Just select a field with the mouse or the cusor keys. If you double-click on a field or press [ENTER], the field name will be inserted in the query edit area. You can even insert a while group (e.g. all IPTC Author fields) if you double-click in the group name.

Customizing the sidebar contents

The contents of the sidebar are filled from a text file with the name Sidetree.ini in the application folder of ImageQuery. This file contains one tree view entry per line. The hierarchy of the entries is built by indentation with a single space per level. Be careful not to use more than one space character per level or the file will not be used by ImageQuery and the sidebar will be disabled (you will get a message at start-up if this is the case). If you want to display a short tool tip or help text, you can add an equal sign after the entry name, followed by the text to be displayed (max. 80 chars).

Here is a short sample for the sidetree.ini file:

EXIF Fields

Group 1

Sub-Item of group 1=This is the help text

ANother sub-item=Wow, another help text

Group 2=Help texts for groups are OK

Group 2 sub-item

IPTC Fields

An entry=You don’t need to create groups, this will do fine.

A sample sidetree.ini file

User-specific sidebar contents

If you want to have user-specific sidebar content, just put a sidetree.ini file in the application data file for ImageQuery (which is located under you user profile folder). This will automatically override the default file from the ImageQuery folder. If you are not sure how to do this, ask you system administrator for help.


Working with the sidebar

Arbeiten mit der Feldliste

Grundlagen

Einer der Programmtester schrieb, “die Abfragesprache ist toll, aber wer kann sich schon all die Feldnamen merken?”. Deshalb habe ich neben der Möglichkeit der Feldnamenvervollständigung noch die Feldliste in das Programm integriert. Den Inhalt dieser Liste können Sie sogar einfach an eigene Bedürfnisse anpassen, umstellen oder eigene Hilfetexte ergänzen. Hier erfahren Sie mehr.

Ein- und Auschschalten der Feldliste

Sie können die Feldliste über den Menüpunkt “Ansicht” / “Feldliste an-aus”, das Tastenkürzel [F11] oder die Symbolleiste aktivieren. Dies ist ein Wechselschalter. Beim nächsten Auslösen wird die Feldliste also wieder ausgeschaltet.

Die Feldliste links im Bild.

Arbeiten mit der Feldliste

Wählen Sie mit der Maus oder den Cursortasten ein Feld aus. Bei einem Doppelklick oder dem Druck auf [ENTER] wird dieser Feldname im Bearbeitungsbereich der Abfrage an der Position der Textmarke eingefügt.

Sie können sogar eine ganze Gruppe von Feldnamen einfügen. Falls Sie auf einen der Gruppennamen doppelklicken, werden die Namen aller Unterelemente getrennt durch Kommata eingefügt!

Anpassen der Feldlisteninhalte

Der Inhalt der Baumdarstellung der Feldliste kann von Ihnen leicht angepasst werden. Sie müssen dazu die Datei sidetree.ini im Programmverzeichnis von ImageQuery ändern. Falls Sie dazu keine Schreibrechte haben oder eine benutzerspezifische Anpassung wünschen, kopieren oder erstellen Sie eine Datei mit dem Namen Sidetree.ini im Ordner mit den Anwendungsdaten unter Ihrem Profil (bei einem deutschen Windows üblicherweise unter dem Ordner c:\Dokumente und Einstellungen\<benutzername>\Anwendungsdaten und darunter \Midnight!Software\ImageQuery).

Das Format ist eine Textdatei mit einem Eintrag pro Zeile. Die Baumstruktur ergibt sich durch die Einrückungen. Pro Ebene wird dafür jeweils ein einzelnes Leerzeichen an den Anfang der Zeile gestellt. Achtung: sollten Sie von einer Ebene zur nächsten mehr als ein Leerzeichen einrücken, kann die Datei nicht verarbeitet werden und die Feldliste steht nicht zur Verfügung (Sie erhalten dann beim Programmstart einen Hinweis).

Falls Sie das wünschen, können Sie nach den Feldnamen, getrennt durch ein Gleichheitszeichen (wie unten zu sehen), einen kleinen Hilfetext eingeben, der dann angezeigt, wenn das entsprechende Feld ausgewählt wird. Die Länge dieses Hilfetextes sollte 80 Zeichen nicht überschreiten.

Hier ist ein Beispiel für eine Datei sidetree.ini:

EXIF Fields

Group 1

Sub-Item of group 1=This is the help text

ANother sub-item=Wow, another help text

Group 2=Help texts for groups are OK

Group 2 sub-item

IPTC Fields

An entry=You don’t need to create groups, this will do fine.

Beispiel für eine sidetree.ini


Exif field names

Exif Feldnamen

ApertureValue

Blendenwert als Zahl (z.B. 5.6). Das Dezimaltrennzeichen ist immer der Punkt.

Artist

Name des Fotografen

BrightnessValue

Helligkeitswert in APEX-Einheiten.

CFAPattern

ColorSpace

Farbraum, der Wert 1 steht für sRGB.

ComponentsConfiguration

CompressedBitsPerPixel

Copyright

Copyright-Hinweis für das Bild

DateTime

Datum und Zeit der Bilderstellung im Format JJJJ:MM:TT HH:MM:SS. Normalerweise steht hier der gleiche Wert wie bei DateTimeOriginal.

DateTimeDigitized

Datum und Zeit der Bilddigitalisierung im Format JJJJ:MM:TT HH:MM:SS. Bei Digitalkameras entspricht dies DateTimeOriginal.

DateTimeOriginal

Datum und Zeit der Bilderstellung im Format JJJJ:MM:TT HH:MM:SS. Bei Scans kann hier ein anderes Datum als bei DateTimeDigitized stehen, da dieses Feld dann für die Zeit der tatsächlichen analogen Aufnahme gedacht ist.

ExifVersion

Die Version der EXIF-Informationen.

ExposureBiasValue

ExposureIndex

ExposureProgram

Das gewählte Belichtungsprogramm. Kann die folgenden Werte enthalten: Manual, Program Normal, Aperture priority, Shutter priority, Program Creative, Program Hi-speed, Program Portrait, Program Landscape, unknown.

ExposureTime

Die Belichtungszeit in der Form 1/sek. Falls hier kein Wert steht, kann diese Information auch bei ShutterSpeedValue zu finden sein.

FicalPlaneResolutionUnit

FileSource

Quelle der Bilddaten als String, normalerweise steht hier immer DSC (für digital still camera).

Flash

0 = kein Blitz,

1 = Blitz;

5 = Bltz, kein Lichtrücks.

7 = Blitz, Lichtrückstrahl

FlashEnergy

FlashPixVersion

FNumber

Die Blende zum Zeitpunkt der Aufnahme. Falls hier kein Wert eingetragen ist, kann dieser auch unter ApertureValue zu finden sein.

FocalLength

Die Brennweite für die Aufnahme in Millimeter.

FocalPlaneXResolution

FocalPlaneYResolution

ImageDescription

Die Beschreibung der Datei.

ImageHeight

Die Höhe des Bildes in Pixel, manche Kameras tragen diesen Wert nicht ein.

ImageWidth

Die Breite des Bildes in Pixel, manche Kameras tragen diesen Wert nicht ein.

ISOSpeedRating

Die Empfindlichkeit in ISO-Stufen, z.B. 400.

JPEGInterchangeFormat

JPEGInterchangeFormatLength

LightSource

Die Lichtquelle für das Bild:

0 = unknown 1 = Daylight

2 = Fluorescent 3 = Tungsten

17 = Standard light A 18 = Standard light B

19 = Standard light C 20 = D55

21 = D65 22 = D75

23 to 254 = reserved 255 = other

Make

Hersteller der Kamera als Text, z.B. 'CANON'.

MaxApertureValue

Die größtmögliche Blendenöffnung zum Zeitpunkt der Aufnahme.

MeteringMode

Messmethode bei der Aufnahme. Einer der folgenden Werte als Text: Unknown, Average, CenterWeighted, Spot, MultiSpot, MultiSegment, Partial.

Model

Modell der Kamera.

OECF

Orientation

Die Ausrichtung der Kamera (z.B: Hoch oder Quer). Nicht alle Kameras tragen hier einen Wert ein. Folgende Werte sind möglich:

top-left / top-right / bottom-right / bottom-left / left-top / right-top / right-bottom / left-bottom

Die Angaben beziehen sich auf die Position des ersten Bildpunktes der ersten Zeile. Bei einer normalen Querformataufnahme ist links oben auch die erste Spalte der ersten Zeile, also 'top-left'.

PrimaryChromaticities

ReferenceBlackWhite

ResolutionUnit

Auflösungseinheit des Bildes, entweder “dpi”, “dpcm” oder “none”.

RowsPerStrip

SceneType

SensingMethod

Sensortyp der Kamera:

1 = Not defined

2 = One-chip color area sensor

3 = Two-chip color area sensor

4 = Three-chip color area sensor

5 = Color sequential area sensor

7 = Trilinear sensor

8 = Color sequential linear sensor

Other = reserved

ShutterSpeedValue

Die Belichtungszeit in der Form 1/sek. Falls hier kein Wert steht, kann diese Information auch bei ExposureTime zu finden sein.

Software

Hier kann die Bildbearbeitungssoftware einen Eintrag machen, z.B. den Programmnamen und die Version.

SpatialFrequencyResponse

SpectralSensitivity

StripByteCounts

StripOffsets

SubjectDistance

Entfernung des Fokuspunktes in Metern als Dezimalbruch.

SubjectLocation

Angaben zum Ort der Aufnahme.

SubSecTime

SubSecTimeDigitized

SubSecTimeOriginal

TransferFunction

UserComment

Kommentar zum Bild. Hier kann auch Unicode-Text eingetragen sein.

WhitePoint

Weisspunkt der Aufnahme.

XResolution

Auflösung in X-Richtung. Die Einheit steht unter ResolutionUnit.

YCbCrCoefficients

YCbCrPositioning

YCbCrSubSampling

YResolution

Auflösung in Y-Richtung. Die Einheit steht unter ResolutionUnit.

Vorschaubild-Felder

PreviewBitsPerSample

PreviewCompression

PreviewImageHeight

Falls eingetragen, die Höhe des Vorschaubildes (meist ist dieses Feld leer).

PreviewImageWidth

Falls eingetragen, die Breite des Vorschaubildes (meist ist dieses Feld leer).

PreviewJpegByteCount

Die Größe des Vorschaubildes in Byte.

PreviewJpegOffset

Der Offset des Vorschaubildes. Eigentlich für Anwender uninteressant, bietet dies eine einfache Möglichkeit, festzustellen, ob ein EXIF-Vorschaubild vorhanden ist. Dann ist dieser Wert nämlich größer als 0. Ein WHERE PreviewJpegOffset > 0 bringt also nur die Bilder mit EXIF-Vorschaubild.

PreviewPhotometricInterpretation

PreviewPlanarConfiguration

PreviewReferenceBlackWhite

PreviewResolutionUnit

Die Auflösungseinheit des Vorschaubildes als String (normal entweder “dpi”, “dpcm” oder “none”).

PreviewRowsPerStrip

PreviewSamplesPerPixel

PreviewStripByteConunts

PreviewStripOffsets

PreviewXResolution

Auflösung der Vorschau in X-Richtung.

PreviewYCbCrCoefficients

PreviewYCbCrPositioning

PreviewYCbCrSubSampling

PreviewYResolution

Auflösung der Vorschau in Y-Richtung.


FileInfo field names

FileInfo Feldnamen

JpgComment

Der Kommentar für eine JPG-Datei. Steht bei JPG-Dateien in einem eigenen Datensegment (Markercode 0xFF, 0xFE). Normalerweise nicht längerals 255 Zeichen.

FullName

Der komplette Name der Datei inklusive Pfadangabe, max. Länge 255 Zeichen.

Size

Die Größe der Datei in Byte.

FileDateCreated

Das Datum der Dateierzeugung.

FileDateModified

Das Datum der letzten Änderung der Datei.

Path

Der Pfadanteil des Dateinamens.

Name

Nur der Dateiname ohne Pfad.


IPTC-Fields

IPTC-Felder

Diese Liste soll eine kurze Beschreibung der einzelnen IPTC-Felder liefern. Viele dieser Felder werden allerdings von Fotografen oder Bildagenturen nicht wie vorgesehen benutzt, so dass im Einzelfall eine Abklärung sinnvoll sein kann. Bei fehlenden Angaben ist der Autor für Hinweise oder Informationen dankbar.

Liste der Felder

ActionAdvised

(noch keine Informationen)

ByLine

ID-Tag: 80 Länge: <= 32 Byte String

Name des Autors des Bildes, normalerweise der Fotograf

ByLineTitle

ID-Tag: 85 Länge: <= 32 Byte String

Der Titel desjenigen, der bei ByLine eingetragen ist. Dies kann ein akademischer Titel, eine Berufsbezeichnung oder ähnliches sein.

Caption

ID-Tag: 120 Länge: < 2000 Byte String

Eine textuelle Beschreibung des Objekts, Zusammenfassung mit biszu 2000 Zeichen, nicht zu verwechseln mit dem Titel, der steht unter Headline.

Category

ID-Tag: 15 Länge: <= 3 Byte String

Die Kategorie für das Bildobjekt. Da lt. IPTC nur drei Zeichen zugelassen sind, handelt es sich meist um eine Abkürzung oder einen nummerischen Kategoriencode. Interessanter sind meist die Einträge unter SupplementalCategory.

City

ID-Tag: 90 Länge: <= 32 Byte String

Name der Stadt als Beschreibung zum Inhalt. Falls sich der Inhalt nicht gezielt auf einen bestimmten Ort bezieht, sollte das Feld leer gelassen werden.

Contact

Kontaktinformationen, beispielsweise Name oder Webadresse der Bildagentur.

ContentLocationCode

(noch keine Informationen)

ContentLocationName

(noch keine Informationen)

CopyrightNotice

ID-Tag: 116 Länge: <= 128 Byte String

Der Copyright-Hinweis für das Objekt. Wird mittlerweile meist mit einer URL kombiniert angegeben.

CountryCode

ID-Tag: 100 Länge: 3 Byte String

Landescode des Landes als Beschreibung zum Inhalt, beispielsweise der Stadtteil oder ein Vorort. Falls sich der Inhalt nicht gezielt auf einen bestimmten Ort bezieht, sollte das Feld leer gelassen werden. Der Code ist das Nationalitätskennzeichen.

CountryName

ID-Tag: 101 Länge: <= 64 Byte String

Der ausgeschriebene Name des Landes als Beschreibung zum Inhalt, beispielsweise der Stadtteil oder ein Vorort. Falls sich der Inhalt nicht gezielt auf einen bestimmten Ort bezieht, sollte das Feld leer gelassen werden.

Credit

ID-Tag: 110 Länge: <= 32 Byte String

Der Anbieter, nicht notwendigerweise der Autor oder Fotograf. Normalerweise der Ort, wo das Geld fürs Bild hingeht. :-)

Custom1 - Custom20

DateCreated

ID-Tag: 55 Länge: 8 Byte Datum

Das Datum, an dem der Inhalt erstellt wurde. Mittlerweile findet sich hier oft anstelle des Zeitpunktes des Inhalts der Zeitpunkt der Dateierstellung oder Digitalisierung, obwohl dafür das Feld DigitalCreationDate vorgesehen ist.

DigitalCreationDate

ID-Tag: 62 Länge: 8 Byte Datum

Datum der Erstellung des digitalen Objekts (der Bilddatei).

DigitalCreationTime

ID-Tag: 63 Länge: 8 Byte Zeit

Zeit der Erstellung des digitalen Objekts (der Bilddatei).

EditorialUpdate

(noch keine Informationen)

EditStatus

ID-Tag: 7 Länge: <= 64 Byte String

Dient der Kennzeichnung des Bearbeitungszustands je nach Verarbeiter

ExpirationDate

ExpirationTime

FixtureIdentifier

ID-Tag: 22 Länge: <= 32 Byte String

Dient der Kennzeichnung immer wieder vorkommender Unterscheidungsmerkmale für Objekte, bei Bildern z.B. Hoch- oder Querformat.

Headline

ID-Tag: 105 Länge: <= 256 Byte String

Eine Titelbeschreibung des Inhalts, wie die Schlagzeile in einer Zeitschrift. Sollte kurz und prägnant den Inhalt ausdrücken. Für weitergehende Beschreibungen ist das Feld Caption vorgesehen.

ImageOrientation

(noch keine Informationen)

ImageType

(noch keine Informationen)

Keywords

ID-Tag: 25 Länge: <= 64 Byte String

Auch dieses Feld kann mehrfach auftauchen. Jeder Eintrag kann bis zu 64 Zeichen umfassen. Für die Verschlagwortung das wichtigste Feld im IPTC-Standard. ImageQuery trennt bei der Ausgabe die einzelnen Schlüsselwörter durch ein Semikolon.

LanguageIdentifier

(noch keine Informationen)

ObjectCycle

(noch keine Informationen)

ObjectName

ID-Tag: 5 Länge: <= 64 Byte String

Dieses Feld dient als schnelle Kennung für ein Bildobjekt, ähnlich dem Dateinamen (dieser wird auch oft in diesem feld abgelegt).

OriginalTransmissionReference

OriginatingProgram

ID-Tag: 65 Länge: <= 32 Byte String

Hier kann das bildverarbeitende Programm seinen Namen eintragen

ProgramVersion

Die Versionsnummer des Programms

ProvinceState

ID-Tag: 92 Länge: <= 32 Byte String

Provinz, Bundesstaat oder Verwaltungeinheit als Beschreibung zum Inhalt, beispielsweise der Stadtteil oder ein Vorort. Falls sich der Inhalt nicht gezielt auf einen bestimmten Ort bezieht, sollte das Feld leer gelassen werden.

RecordVersion

(noch keine Informationen)

ReferenceDate

(noch keine Informationen)

ReferenceNumber

(noch keine Informationen)

ReferenceService

(noch keine Informationen)

ReleaseDate

ID-Tag: 30 Länge: 8 Byte Datum

Das Datum, ab dem das Objekt das erste Mal freigegeben wird (ISO 8601-Format: YYYYMMDD)

ReleaseTime

ID-Tag: 35 Länge: 8 Byte Zeit

Die Zeit, ab der das Objekt das erste Mal freigegeben wird (ISO 8601-Format: HH:MM:SS)

Source

ID-Tag: 115 Länge: <= 32 Byte String

Die Quelle, von der das Material stammt. Oft wird hier aber auch die technische Quelle des Bildmaterials eingetragen (z.B. Scan, Dia oder Digital-SLR).

SpecialInstructions

ID-Tag: 40 Länge: <= 256 Byte String

Kennzeichnet besondere Hinweise zur Verarbeitung bzw. Nutzung des Bildobjekts, beispielsweise Zahlungsmodalitäten, Hinweise auf Webadressen oder technische besondere Informationen.

SubjectReference

(noch keine Informationen)

SubLocation

ID-Tag: 92 Länge: <= 32 Byte String

Name des Ortes innerhalb der Stadt als Beschreibung zum Inhalt, beispielsweise der Stadtteil oder ein Vorort. Falls sich der Inhalt nicht gezielt auf einen bestimmten Ort bezieht, sollte das Feld leer gelassen werden.

SupplementalCategory

ID-Tag: 20 Länge: <= 32 Byte String

Dieser Eintrag darf mehrfach auftreten. Damit stehen jeweils 32 Zeichen für eine Kategorienkennzeichnung zur Verfügung.

TimeCreated

ID-Tag: 60 Länge: 8 Byte Zeit

Die Zeit, an der der Inhalt erstellt wurde. Mittlerweile findet sich hier oft anstelle des Zeitpunktes des Inhalts der Zeitpunkt der Dateierstellung oder Digitalisierung, obwohl dafür das Feld DigitalCreationTime vorgesehen ist.

Urgency

ID-Tag: 10 Länge: 1 Byte String

Kennzeichnet die Auftrgasdringlichkeit. Die Werte „0“ und „9“ sind reserviert, der Wert „1“ steht Super-Dringend, „5“ ist normal und „8“ bedeutet, es hat jede Menge Zeit.

WriterEditor

ID-Tag: 122 Länge: <= 32 Byte String

Die bearbeitende Person für das Objekt und die Eintragung der IPTC-Daten. Normalerweise der Ansprechpartner bei Problem mit den Metadaten.


Lizenz

Das Programm ImageQuery ist Freeware und kostenlos (auch beruflich) genutzt und weitergegeben werden, sofern die Weitergabe ebenfalls kostenlos erfolgt. Obwohl die Software getestet und auf Fehler geprüft wird, kann fuer die Funktion oder die Eignung fuer einen bestimmen Einsatzzweck keine Garantie gegeben werden. Alles, was ich Ihnen garantieren kann, ist die Tatsache, dass ImageQuery Platz auf Ihrem Datenträger benötigt J. Keine Gewährleistung bei Datenverlust, der Einsatz erfolgt ausschliesslich auf eigenes Risiko des Benutzers. Das Programm führt keinerlei Schreiboperationen auf dem Datenträger durch, alle Bilddateien werden nur im Lese-Modus geöffnet.

Der Autor ist dankbar für Hinweise zu Programmfehlern, eine Betreuung oder Schulung für die Benutzung des Programms kann aus Zeitgründen aber nicht angeboten werden. Diese Dokumentation enthält alles, was Sie für die Benutzung wissen müssen.

Disclaimer

THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRAN-TIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANT-ABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROF-ITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LI-ABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLI-GENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.